Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


meshchatx/src/backend/http/routes/rn_tools.py ff4e4488d1eb6e84eca4010c73fa4824541e95ab (ff4e4488) Text, 36.22 KB

T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""HTTP routes: rn_tools."""

Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations


Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787httpT7ee787.T7ee787meshchat_names Tff7b72import Tb4b4b4( T8b949e# noqa: F401
Te6edf3GeoValidationErrorTb4b4b4,
Te6edf3OutboundHttpBlockedErrorTb4b4b4,
Te6edf3OverlayExportErrorTb4b4b4,
Te6edf3OverlaySourceParseErrorTb4b4b4,
Te6edf3PluginSecurityErrorTb4b4b4,
Te6edf3AsyncUtilsTb4b4b4,
Te6edf3InterfaceConfigParserTb4b4b4,
Te6edf3InterfaceDiscoveryTb4b4b4,
Te6edf3InterfaceEditorTb4b4b4,
Te6edf3LOGIN_PATHTb4b4b4,
Te6edf3LXMFTb4b4b4,
Te6edf3LxmfAudioFieldTb4b4b4,
Te6edf3LxmfFileAttachmentTb4b4b4,
Te6edf3LxmfFileAttachmentsFieldTb4b4b4,
Te6edf3LxmfImageFieldTb4b4b4,
Te6edf3MAX_EXPORT_TILESTb4b4b4,
Te6edf3MarkdownRendererTb4b4b4,
Te6edf3NomadnetFileDownloaderTb4b4b4,
Te6edf3NomadnetPageDownloaderTb4b4b4,
Te6edf3RNProbeHandlerTb4b4b4,
Te6edf3RNSTb4b4b4,
Te6edf3ReticulumMeshChatTb4b4b4,
Te6edf3SETUP_PATHTb4b4b4,
Te6edf3TRANSPARENT_TILETb4b4b4,
Te6edf3TelemeterTb4b4b4,
Te6edf3UTCTb4b4b4,
Te6edf3WSMsgTypeTb4b4b4,
Te6edf3_is_chaquopy_androidTb4b4b4,
Te6edf3_is_loopback_bind_hostTb4b4b4,
Te6edf3_request_client_ipTb4b4b4,
Te6edf3aiohttpTb4b4b4,
Te6edf3app_versionTb4b4b4,
Te6edf3assert_migration_context_pathsTb4b4b4,
Te6edf3asyncioTb4b4b4,
Te6edf3base64Tb4b4b4,
Te6edf3bcryptTb4b4b4,
Te6edf3binasciiTb4b4b4,
Te6edf3build_blocklist_export_documentTb4b4b4,
Te6edf3build_export_documentTb4b4b4,
Te6edf3build_messages_export_bundleTb4b4b4,
Te6edf3cache_statsTb4b4b4,
Te6edf3cancel_inbound_deliveriesTb4b4b4,
Te6edf3castTb4b4b4,
Te6edf3compute_lxmf_conversation_unread_from_latest_rowTb4b4b4,
Te6edf3configparserTb4b4b4,
Te6edf3contextlibTb4b4b4,
Te6edf3convert_db_favourite_to_dictTb4b4b4,
Te6edf3convert_db_lxmf_message_to_dictTb4b4b4,
Te6edf3convert_lxmf_message_to_dictTb4b4b4,
Te6edf3convert_nomadnet_field_data_to_mapTb4b4b4,
Te6edf3convert_nomadnet_string_data_to_mapTb4b4b4,
Te6edf3convert_propagation_node_state_to_stringTb4b4b4,
Te6edf3copyTb4b4b4,
Te6edf3datetimeTb4b4b4,
Te6edf3describe_port_conflictTb4b4b4,
Te6edf3detect_image_format_from_magicTb4b4b4,
Te6edf3ensure_outbound_http_allowedTb4b4b4,
Te6edf3ensure_session_csrf_tokenTb4b4b4,
Te6edf3filter_announced_dicts_by_search_queryTb4b4b4,
Te6edf3fresh_storage_at_targetTb4b4b4,
Te6edf3get_cached_active_linkTb4b4b4,
Te6edf3get_file_pathTb4b4b4,
Te6edf3get_sessionTb4b4b4,
Te6edf3get_trusted_proxy_cidrsTb4b4b4,
Te6edf3gif_utilsTb4b4b4,
Te6edf3i2p_supportTb4b4b4,
Te6edf3import_messages_export_bundleTb4b4b4,
Te6edf3ioTb4b4b4,
Te6edf3is_mbtiles_filenameTb4b4b4,
Te6edf3is_path_within_dirTb4b4b4,
Te6edf3is_port_in_useTb4b4b4,
Te6edf3is_user_facing_lxmf_payloadTb4b4b4,
Te6edf3jsonTb4b4b4,
Te6edf3list_host_network_interfacesTb4b4b4,
Te6edf3list_inbound_deliveriesTb4b4b4,
Te6edf3list_portsTb4b4b4,
Te6edf3load_app_security_settingsTb4b4b4,
Te6edf3loggerTb4b4b4,
Te6edf3loggingTb4b4b4,
Te6edf3lxmf_sidebar_preview_for_conversation_latest_rowTb4b4b4,
Te6edf3memory_log_handlerTb4b4b4,
Te6edf3message_fields_have_attachmentsTb4b4b4,
Te6edf3migrate_legacy_to_targetTb4b4b4,
Te6edf3mime_for_image_typeTb4b4b4,
Te6edf3normalize_identity_storage_hashTb4b4b4,
Te6edf3normalize_lxmf_sieve_filtersTb4b4b4,
Te6edf3normalize_message_blocklistTb4b4b4,
Te6edf3osTb4b4b4,
Te6edf3parse_bool_query_paramTb4b4b4,
Te6edf3parse_import_documentTb4b4b4,
Te6edf3parse_lxmf_display_nameTb4b4b4,
Te6edf3parse_lxmf_propagation_node_app_dataTb4b4b4,
Te6edf3parse_lxmf_sieve_filters_jsonTb4b4b4,
Te6edf3parse_lxmf_stamp_costTb4b4b4,
Te6edf3parse_message_blocklist_jsonTb4b4b4,
Te6edf3parse_nomadnetwork_node_display_nameTb4b4b4,
Te6edf3platformTb4b4b4,
Te6edf3privacy_mode_enabledTb4b4b4,
Te6edf3psutilTb4b4b4,
Te6edf3purge_messages_before_cutoffTb4b4b4,
Te6edf3reTb4b4b4,
Te6edf3resolve_message_age_cutoffTb4b4b4,
Te6edf3reticulum_pathfindingTb4b4b4,
Te6edf3rotate_session_csrf_tokenTb4b4b4,
Te6edf3rrc_protocolTb4b4b4,
Te6edf3safe_path_under_dirTb4b4b4,
Te6edf3sanitize_sticker_emojiTb4b4b4,
Te6edf3sanitize_sticker_nameTb4b4b4,
Te6edf3sanitize_websocket_config_updateTb4b4b4,
Te6edf3save_app_security_settingsTb4b4b4,
Te6edf3secretsTb4b4b4,
Te6edf3shutilTb4b4b4,
Te6edf3sqlite3Tb4b4b4,
Te6edf3sticker_pack_utilsTb4b4b4,
Te6edf3sysTb4b4b4,
Te6edf3tempfileTb4b4b4,
Te6edf3threadingTb4b4b4,
Te6edf3timeTb4b4b4,
Te6edf3tracebackTb4b4b4,
Te6edf3user_agent_hashTb4b4b4,
Te6edf3validate_export_documentTb4b4b4,
Te6edf3webTb4b4b4,
Te6edf3websocket_type_requires_authTb4b4b4,
Te6edf3zipfileTb4b4b4,
Tb4b4b4)


Tff7b72def Td2a8ffregister_rn_tools_routesTb4b4b4(Te6edf3routesTb4b4b4, Te6edf3appTb4b4b4)Tb4b4b4:

Tff7b72def Td2a8ff_rnsh_require_managerTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3manager Tff7b72= Te6edf3appTff7b72.Td2a8ffrnsh_manager
Tff7b72if Te6edf3manager Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72NoneTb4b4b4, Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffRNSH manager is not availableTa5d6ff"Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff503Tb4b4b4,
Tb4b4b4)
Tff7b72return Te6edf3managerTb4b4b4, Tff7b72None

Tf0883e@routesTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnsh/sessionsTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnsh_sessions_getTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnsh_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Te6edf3managerTff7b72.Td2a8fflist_sessionsTb4b4b4(Tb4b4b4)Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnsh/sessionsTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnsh_sessions_postTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnsh_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Te6edf3data Tff7b72= Tff7b72await Te6edf3requestTff7b72.Td2a8ffjsonTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3session Tff7b72= Te6edf3managerTff7b72.Td2a8ffcreate_sessionTb4b4b4(Te6edf3data Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)
Tff7b72except Tf85149ValueError Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Te6edf3autostart Tff7b72= Tffa657boolTb4b4b4(Tb4b4b4(Te6edf3data Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffautostartTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3autostartTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3sessionTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72with Te6edf3contextlibTff7b72.Td2a8ffsuppressTb4b4b4(Tf85149ExceptionTb4b4b4)Tb4b4b4:
Te6edf3managerTff7b72.Td2a8ffremove_sessionTb4b4b4(Te6edf3sessionTff7b72.Td2a8ffsession_idTb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffsessionTa5d6ff"Tb4b4b4: Te6edf3sessionTff7b72.Td2a8ffto_dictTb4b4b4(Te6edf3include_output_tailTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4}Tb4b4b4,
Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffdeleteTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnsh/sessions/Tffd700{session_id}Ta5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnsh_sessions_deleteTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnsh_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Te6edf3session_id Tff7b72= Te6edf3requestTff7b72.Td2a8ffmatch_infoTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsession_idTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3managerTff7b72.Td2a8ffremove_sessionTb4b4b4(Te6edf3session_idTb4b4b4)
Tff7b72except Tf85149KeyErrorTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSession not foundTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff404Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff500Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSession removedTa5d6ff"Tb4b4b4}Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnsh/sessions/Tffd700{session_id}Ta5d6ff/startTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnsh_session_startTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnsh_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Te6edf3session_id Tff7b72= Te6edf3requestTff7b72.Td2a8ffmatch_infoTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsession_idTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3session Tff7b72= Te6edf3managerTff7b72.Td2a8ffstart_sessionTb4b4b4(Te6edf3session_idTb4b4b4)
Tff7b72except Tf85149KeyErrorTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSession not foundTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff404Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsessionTa5d6ff"Tb4b4b4: Te6edf3sessionTb4b4b4}Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnsh/sessions/Tffd700{session_id}Ta5d6ff/stopTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnsh_session_stopTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnsh_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Te6edf3session_id Tff7b72= Te6edf3requestTff7b72.Td2a8ffmatch_infoTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsession_idTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3session Tff7b72= Te6edf3managerTff7b72.Td2a8ffstop_sessionTb4b4b4(Te6edf3session_idTb4b4b4)
Tff7b72except Tf85149KeyErrorTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSession not foundTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff404Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsessionTa5d6ff"Tb4b4b4: Te6edf3sessionTb4b4b4}Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnsh/sessions/Tffd700{session_id}Ta5d6ff/inputTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnsh_session_inputTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnsh_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Te6edf3session_id Tff7b72= Te6edf3requestTff7b72.Td2a8ffmatch_infoTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsession_idTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3data Tff7b72= Tff7b72await Te6edf3requestTff7b72.Td2a8ffjsonTb4b4b4(Tb4b4b4)
Te6edf3text Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftextTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3textTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffInput text is requiredTa5d6ff"Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff400Tb4b4b4,
Tb4b4b4)
Te6edf3add_newline Tff7b72= Tffa657boolTb4b4b4(Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnewlineTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3add_newline Tff7b72and Tff7b72not Te6edf3textTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3text Tff7b72+Tff7b72= Ta5d6ff"Tffea00\nTa5d6ff"
Tff7b72tryTb4b4b4:
Te6edf3session Tff7b72= Te6edf3managerTff7b72.Td2a8ffsend_inputTb4b4b4(Te6edf3session_idTb4b4b4, Te6edf3textTb4b4b4)
Tff7b72except Tf85149KeyErrorTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSession not foundTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff404Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsessionTa5d6ff"Tb4b4b4: Te6edf3sessionTb4b4b4}Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnsh/sessions/Tffd700{session_id}Ta5d6ff/resizeTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnsh_session_resizeTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnsh_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Te6edf3session_id Tff7b72= Te6edf3requestTff7b72.Td2a8ffmatch_infoTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsession_idTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3data Tff7b72= Tff7b72await Te6edf3requestTff7b72.Td2a8ffjsonTb4b4b4(Tb4b4b4)
Te6edf3rows Tff7b72= Tb4b4b4(Te6edf3data Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffrowsTa5d6ff"Tb4b4b4)
Te6edf3cols Tff7b72= Tb4b4b4(Te6edf3data Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcolsTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3session Tff7b72= Te6edf3managerTff7b72.Td2a8ffresize_sessionTb4b4b4(Te6edf3session_idTb4b4b4, Te6edf3rowsTb4b4b4, Te6edf3colsTb4b4b4)
Tff7b72except Tf85149KeyErrorTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSession not foundTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff404Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsessionTa5d6ff"Tb4b4b4: Te6edf3sessionTb4b4b4}Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnsh/sessions/Tffd700{session_id}Ta5d6ff/outputTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnsh_session_outputTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnsh_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Te6edf3session_id Tff7b72= Te6edf3requestTff7b72.Td2a8ffmatch_infoTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsession_idTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3cursor Tff7b72= Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcursorTa5d6ff"Tb4b4b4, T79c0ff0Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3payload Tff7b72= Te6edf3managerTff7b72.Td2a8ffoutput_sinceTb4b4b4(Te6edf3session_idTb4b4b4, Te6edf3cursorTb4b4b4)
Tff7b72except Tf85149KeyErrorTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSession not foundTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff404Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Te6edf3payloadTb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnsh/sessions/Tffd700{session_id}Ta5d6ff/clearTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnsh_session_clearTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnsh_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Te6edf3session_id Tff7b72= Te6edf3requestTff7b72.Td2a8ffmatch_infoTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsession_idTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3session Tff7b72= Te6edf3managerTff7b72.Td2a8ffclear_outputTb4b4b4(Te6edf3session_idTb4b4b4)
Tff7b72except Tf85149KeyErrorTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSession not foundTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff404Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsessionTa5d6ff"Tb4b4b4: Te6edf3sessionTb4b4b4}Tb4b4b4)

Tff7b72def Td2a8ff_rnx_require_managerTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3manager Tff7b72= Te6edf3appTff7b72.Td2a8ffrnx_manager
Tff7b72if Te6edf3manager Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72NoneTb4b4b4, Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffRNX manager is not availableTa5d6ff"Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff503Tb4b4b4,
Tb4b4b4)
Tff7b72return Te6edf3managerTb4b4b4, Tff7b72None

Tf0883e@routesTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnx/sessionsTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnx_sessions_getTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnx_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Te6edf3managerTff7b72.Td2a8fflist_sessionsTb4b4b4(Tb4b4b4)Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnx/sessionsTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnx_sessions_postTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnx_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Te6edf3data Tff7b72= Tff7b72await Te6edf3requestTff7b72.Td2a8ffjsonTb4b4b4(Tb4b4b4)
Te6edf3session Tff7b72= Te6edf3managerTff7b72.Td2a8ffcreate_sessionTb4b4b4(Te6edf3data Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)
Te6edf3autostart Tff7b72= Tffa657boolTb4b4b4(Tb4b4b4(Te6edf3data Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffautostartTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3autostartTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3sessionTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72with Te6edf3contextlibTff7b72.Td2a8ffsuppressTb4b4b4(Tf85149ExceptionTb4b4b4)Tb4b4b4:
Te6edf3managerTff7b72.Td2a8ffremove_sessionTb4b4b4(Te6edf3sessionTff7b72.Td2a8ffsession_idTb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffsessionTa5d6ff"Tb4b4b4: Te6edf3sessionTff7b72.Td2a8ffto_dictTb4b4b4(Te6edf3include_output_tailTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4}Tb4b4b4,
Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffdeleteTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnx/sessions/Tffd700{session_id}Ta5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnx_sessions_deleteTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnx_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Te6edf3session_id Tff7b72= Te6edf3requestTff7b72.Td2a8ffmatch_infoTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsession_idTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3managerTff7b72.Td2a8ffremove_sessionTb4b4b4(Te6edf3session_idTb4b4b4)
Tff7b72except Tf85149KeyErrorTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSession not foundTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff404Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff500Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSession removedTa5d6ff"Tb4b4b4}Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnx/sessions/Tffd700{session_id}Ta5d6ff/startTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnx_session_startTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnx_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Te6edf3session_id Tff7b72= Te6edf3requestTff7b72.Td2a8ffmatch_infoTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsession_idTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3session Tff7b72= Te6edf3managerTff7b72.Td2a8ffstart_sessionTb4b4b4(Te6edf3session_idTb4b4b4)
Tff7b72except Tf85149KeyErrorTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSession not foundTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff404Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsessionTa5d6ff"Tb4b4b4: Te6edf3sessionTb4b4b4}Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnx/sessions/Tffd700{session_id}Ta5d6ff/stopTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnx_session_stopTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnx_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Te6edf3session_id Tff7b72= Te6edf3requestTff7b72.Td2a8ffmatch_infoTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsession_idTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3session Tff7b72= Te6edf3managerTff7b72.Td2a8ffstop_sessionTb4b4b4(Te6edf3session_idTb4b4b4)
Tff7b72except Tf85149KeyErrorTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSession not foundTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff404Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsessionTa5d6ff"Tb4b4b4: Te6edf3sessionTb4b4b4}Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnx/sessions/Tffd700{session_id}Ta5d6ff/inputTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnx_session_inputTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnx_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Te6edf3session_id Tff7b72= Te6edf3requestTff7b72.Td2a8ffmatch_infoTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsession_idTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3data Tff7b72= Tff7b72await Te6edf3requestTff7b72.Td2a8ffjsonTb4b4b4(Tb4b4b4)
Te6edf3text Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftextTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3textTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffInput text is requiredTa5d6ff"Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff400Tb4b4b4,
Tb4b4b4)
Te6edf3add_newline Tff7b72= Tffa657boolTb4b4b4(Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnewlineTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3add_newline Tff7b72and Tff7b72not Te6edf3textTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3text Tff7b72+Tff7b72= Ta5d6ff"Tffea00\nTa5d6ff"
Tff7b72tryTb4b4b4:
Te6edf3session Tff7b72= Te6edf3managerTff7b72.Td2a8ffsend_inputTb4b4b4(Te6edf3session_idTb4b4b4, Te6edf3textTb4b4b4)
Tff7b72except Tf85149KeyErrorTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSession not foundTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff404Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsessionTa5d6ff"Tb4b4b4: Te6edf3sessionTb4b4b4}Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnx/sessions/Tffd700{session_id}Ta5d6ff/resizeTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnx_session_resizeTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnx_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Te6edf3session_id Tff7b72= Te6edf3requestTff7b72.Td2a8ffmatch_infoTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsession_idTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3data Tff7b72= Tff7b72await Te6edf3requestTff7b72.Td2a8ffjsonTb4b4b4(Tb4b4b4)
Te6edf3rows Tff7b72= Tb4b4b4(Te6edf3data Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffrowsTa5d6ff"Tb4b4b4)
Te6edf3cols Tff7b72= Tb4b4b4(Te6edf3data Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcolsTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3session Tff7b72= Te6edf3managerTff7b72.Td2a8ffresize_sessionTb4b4b4(Te6edf3session_idTb4b4b4, Te6edf3rowsTb4b4b4, Te6edf3colsTb4b4b4)
Tff7b72except Tf85149KeyErrorTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSession not foundTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff404Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsessionTa5d6ff"Tb4b4b4: Te6edf3sessionTb4b4b4}Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnx/sessions/Tffd700{session_id}Ta5d6ff/outputTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnx_session_outputTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnx_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Te6edf3session_id Tff7b72= Te6edf3requestTff7b72.Td2a8ffmatch_infoTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsession_idTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3cursor Tff7b72= Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcursorTa5d6ff"Tb4b4b4, T79c0ff0Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3payload Tff7b72= Te6edf3managerTff7b72.Td2a8ffoutput_sinceTb4b4b4(Te6edf3session_idTb4b4b4, Te6edf3cursorTb4b4b4)
Tff7b72except Tf85149KeyErrorTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSession not foundTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff404Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Te6edf3payloadTb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnx/sessions/Tffd700{session_id}Ta5d6ff/clearTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnx_session_clearTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3managerTb4b4b4, Te6edf3error Tff7b72= Te6edf3_rnx_require_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3error Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3error
Te6edf3session_id Tff7b72= Te6edf3requestTff7b72.Td2a8ffmatch_infoTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsession_idTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3session Tff7b72= Te6edf3managerTff7b72.Td2a8ffclear_outputTb4b4b4(Te6edf3session_idTb4b4b4)
Tff7b72except Tf85149KeyErrorTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSession not foundTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff404Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsessionTa5d6ff"Tb4b4b4: Te6edf3sessionTb4b4b4}Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rncp/sendTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrncp_sendTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3data Tff7b72= Tff7b72await Te6edf3requestTff7b72.Td2a8ffjsonTb4b4b4(Tb4b4b4)
Te6edf3destination_hash_str Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3file_path Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fffile_pathTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3timeout Tff7b72= Tffa657floatTb4b4b4(Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffPATH_REQUEST_TIMEOUTTb4b4b4)Tb4b4b4)
Te6edf3no_compress Tff7b72= Tffa657boolTb4b4b4(Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffno_compressTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4)

Tff7b72tryTb4b4b4:
Te6edf3destination_hash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3destination_hash_strTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6fffTa5d6ff"Ta5d6ffInvalid destination hash: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff400Tb4b4b4,
Tb4b4b4)

Te6edf3transfer_id Tff7b72= Tff7b72None

Tff7b72def Td2a8ffon_transfer_startedTb4b4b4(Te6edf3tidTb4b4b4)Tb4b4b4:
Tff7b72nonlocal Te6edf3transfer_id
Te6edf3transfer_id Tff7b72= Te6edf3tid

Tff7b72def Td2a8ffon_progressTb4b4b4(Te6edf3progressTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3transfer_idTb4b4b4:
Te6edf3AsyncUtilsTff7b72.Td2a8ffrun_asyncTb4b4b4(
Te6edf3appTff7b72.Td2a8ff_broadcast_websocket_messageTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffrncp.transfer.progressTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftransfer_idTa5d6ff"Tb4b4b4: Te6edf3transfer_idTb4b4b4,
Ta5d6ff"Ta5d6ffprogressTa5d6ff"Tb4b4b4: Te6edf3progressTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)

Tff7b72tryTb4b4b4:
Te6edf3result Tff7b72= Tff7b72await Te6edf3appTff7b72.Td2a8ffrncp_handlerTff7b72.Td2a8ffsend_fileTb4b4b4(
Te6edf3destination_hashTff7b72=Te6edf3destination_hashTb4b4b4,
Te6edf3file_pathTff7b72=Te6edf3file_pathTb4b4b4,
Te6edf3timeoutTff7b72=Te6edf3timeoutTb4b4b4,
Te6edf3on_progressTff7b72=Te6edf3on_progressTb4b4b4,
Te6edf3no_compressTff7b72=Te6edf3no_compressTb4b4b4,
Te6edf3on_transfer_startedTff7b72=Te6edf3on_transfer_startedTb4b4b4,
Tb4b4b4)
Te6edf3AsyncUtilsTff7b72.Td2a8ffrun_asyncTb4b4b4(
Te6edf3appTff7b72.Td2a8ff_broadcast_websocket_messageTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffrncp.send.completedTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftransfer_idTa5d6ff"Tb4b4b4: Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6fftransfer_idTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fffile_pathTa5d6ff"Tb4b4b4: Te6edf3resultTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fffile_pathTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffcompletedTa5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Te6edf3resultTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff500Tb4b4b4,
Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rncp/fetchTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrncp_fetchTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3data Tff7b72= Tff7b72await Te6edf3requestTff7b72.Td2a8ffjsonTb4b4b4(Tb4b4b4)
Te6edf3destination_hash_str Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3file_path Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fffile_pathTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3timeout Tff7b72= Tffa657floatTb4b4b4(Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffPATH_REQUEST_TIMEOUTTb4b4b4)Tb4b4b4)
Te6edf3save_path Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsave_pathTa5d6ff"Tb4b4b4)
Te6edf3allow_overwrite Tff7b72= Tffa657boolTb4b4b4(Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffallow_overwriteTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4)

Tff7b72tryTb4b4b4:
Te6edf3destination_hash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3destination_hash_strTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6fffTa5d6ff"Ta5d6ffInvalid destination hash: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff400Tb4b4b4,
Tb4b4b4)

Te6edf3transfer_id Tff7b72= Tff7b72None

Tff7b72def Td2a8ffon_transfer_startedTb4b4b4(Te6edf3tidTb4b4b4)Tb4b4b4:
Tff7b72nonlocal Te6edf3transfer_id
Te6edf3transfer_id Tff7b72= Te6edf3tid

Tff7b72def Td2a8ffon_progressTb4b4b4(Te6edf3progressTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3transfer_idTb4b4b4:
Te6edf3AsyncUtilsTff7b72.Td2a8ffrun_asyncTb4b4b4(
Te6edf3appTff7b72.Td2a8ff_broadcast_websocket_messageTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffrncp.transfer.progressTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftransfer_idTa5d6ff"Tb4b4b4: Te6edf3transfer_idTb4b4b4,
Ta5d6ff"Ta5d6ffprogressTa5d6ff"Tb4b4b4: Te6edf3progressTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)

Tff7b72tryTb4b4b4:
Te6edf3result Tff7b72= Tff7b72await Te6edf3appTff7b72.Td2a8ffrncp_handlerTff7b72.Td2a8fffetch_fileTb4b4b4(
Te6edf3destination_hashTff7b72=Te6edf3destination_hashTb4b4b4,
Te6edf3file_pathTff7b72=Te6edf3file_pathTb4b4b4,
Te6edf3timeoutTff7b72=Te6edf3timeoutTb4b4b4,
Te6edf3on_progressTff7b72=Te6edf3on_progressTb4b4b4,
Te6edf3save_pathTff7b72=Te6edf3save_pathTb4b4b4,
Te6edf3allow_overwriteTff7b72=Te6edf3allow_overwriteTb4b4b4,
Te6edf3on_transfer_startedTff7b72=Te6edf3on_transfer_startedTb4b4b4,
Tb4b4b4)
Te6edf3AsyncUtilsTff7b72.Td2a8ffrun_asyncTb4b4b4(
Te6edf3appTff7b72.Td2a8ff_broadcast_websocket_messageTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffrncp.fetch.completedTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffile_pathTa5d6ff"Tb4b4b4: Te6edf3resultTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fffile_pathTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffcompletedTa5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Te6edf3resultTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff500Tb4b4b4,
Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rncp/transfer/Tffd700{transfer_id}Ta5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrncp_transfer_statusTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3transfer_id Tff7b72= Te6edf3requestTff7b72.Td2a8ffmatch_infoTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftransfer_idTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3status Tff7b72= Te6edf3appTff7b72.Td2a8ffrncp_handlerTff7b72.Td2a8ffget_transfer_statusTb4b4b4(Te6edf3transfer_idTb4b4b4)
Tff7b72if Te6edf3statusTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Te6edf3statusTb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffTransfer not foundTa5d6ff"Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff404Tb4b4b4,
Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rncp/listenTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrncp_listenTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3data Tff7b72= Tff7b72await Te6edf3requestTff7b72.Td2a8ffjsonTb4b4b4(Tb4b4b4)
Te6edf3allowed_hashes Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffallowed_hashesTa5d6ff"Tb4b4b4, Tb4b4b4[Tb4b4b4]Tb4b4b4)
Te6edf3fetch_allowed Tff7b72= Tffa657boolTb4b4b4(Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fffetch_allowedTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4)
Te6edf3fetch_jail Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fffetch_jailTa5d6ff"Tb4b4b4)
Te6edf3allow_overwrite Tff7b72= Tffa657boolTb4b4b4(Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffallow_overwriteTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4)

Tff7b72tryTb4b4b4:
Te6edf3destination_hash Tff7b72= Te6edf3appTff7b72.Td2a8ffrncp_handlerTff7b72.Td2a8ffsetup_receive_destinationTb4b4b4(
Te6edf3allowed_hashesTff7b72=Te6edf3allowed_hashesTb4b4b4,
Te6edf3fetch_allowedTff7b72=Te6edf3fetch_allowedTb4b4b4,
Te6edf3fetch_jailTff7b72=Te6edf3fetch_jailTb4b4b4,
Te6edf3allow_overwriteTff7b72=Te6edf3allow_overwriteTb4b4b4,
Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3destination_hashTb4b4b4,
Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffRNCP listener startedTa5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff500Tb4b4b4,
Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rncp/statusTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrncp_statusTb4b4b4(Te6edf3_requestTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Te6edf3appTff7b72.Td2a8ffrncp_handlerTff7b72.Td2a8ffget_listener_statusTb4b4b4(Tb4b4b4)Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rncp/stopTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrncp_stopTb4b4b4(Te6edf3_requestTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3appTff7b72.Td2a8ffrncp_handlerTff7b72.Td2a8ffteardown_receive_destinationTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffRNCP listener stoppedTa5d6ff"Tb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff500Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rncp/cancelTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrncp_cancelTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3data Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72with Te6edf3contextlibTff7b72.Td2a8ffsuppressTb4b4b4(Tf85149ExceptionTb4b4b4)Tb4b4b4:
Te6edf3data Tff7b72= Tff7b72await Te6edf3requestTff7b72.Td2a8ffjsonTb4b4b4(Tb4b4b4)
Te6edf3transfer_id Tff7b72= Tff7b72None
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3dataTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Te6edf3raw Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftransfer_idTa5d6ff"Tb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3rawTb4b4b4, Tffa657strTb4b4b4) Tff7b72and Te6edf3rawTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3transfer_id Tff7b72= Te6edf3rawTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3result Tff7b72= Te6edf3appTff7b72.Td2a8ffrncp_handlerTff7b72.Td2a8ffcancel_transferTb4b4b4(Te6edf3transfer_idTb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Te6edf3resultTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff500Tb4b4b4)

T8b949e# --- RNS FileSync ---

Tf0883e@routesTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnstatusTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnstatusTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3include_link_stats Tff7b72= Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffinclude_link_statsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fffalseTa5d6ff"Tb4b4b4) Tff7b72in Tb4b4b4(
Ta5d6ff"Ta5d6fftrueTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3sorting Tff7b72= Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsortingTa5d6ff"Tb4b4b4)
Te6edf3sort_reverse Tff7b72= Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsort_reverseTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fffalseTa5d6ff"Tb4b4b4) Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6fftrueTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4)
Te6edf3remote Tff7b72= Tb4b4b4(Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffremoteTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Te6edf3identity_path Tff7b72= Tb4b4b4(Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffidentity_pathTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72or Tff7b72None
Te6edf3identity_name Tff7b72= Tb4b4b4(Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffidentity_nameTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72or Tff7b72None
Te6edf3timeout_raw Tff7b72= Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4)

Te6edf3not_ready Tff7b72= Te6edf3appTff7b72.Td2a8ff_require_rns_tool_handlerTb4b4b4(
Te6edf3appTff7b72.Td2a8ffrnstatus_handlerTb4b4b4,
Ta5d6ff"Ta5d6ffRNStatusTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72if Te6edf3not_ready Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3not_ready

Tff7b72tryTb4b4b4:
Te6edf3timeout Tff7b72= Tffa657floatTb4b4b4(Te6edf3timeout_rawTb4b4b4) Tff7b72if Te6edf3timeout_raw Tff7b72not Tff7b72in Tb4b4b4(Tff7b72NoneTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4) Tff7b72else Tff7b72None
Tff7b72except Tb4b4b4(Tf85149TypeErrorTb4b4b4, Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffInvalid timeoutTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)

Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3remoteTb4b4b4:
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787remote_management_client Tff7b72import Tb4b4b4(
Te6edf3fetch_remote_statusTb4b4b4,
Tb4b4b4)

Tff7b72if Tff7b72not Te6edf3identity_path Tff7b72and Tff7b72not Te6edf3identity_nameTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffidentity_path or identity_name is required for remote queriesTa5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff400Tb4b4b4,
Tb4b4b4)
Te6edf3statsTb4b4b4, Te6edf3link_count Tff7b72= Tff7b72await Te6edf3asyncioTff7b72.Td2a8ffto_threadTb4b4b4(
Te6edf3fetch_remote_statusTb4b4b4,
Te6edf3remote_transport_hashTff7b72=Te6edf3remoteTb4b4b4,
Te6edf3identity_pathTff7b72=Te6edf3identity_pathTb4b4b4,
Te6edf3identity_nameTff7b72=Te6edf3identity_nameTb4b4b4,
Te6edf3reticulum_config_dirTff7b72=Tffa657getattrTb4b4b4(Te6edf3appTb4b4b4, Ta5d6ff"Ta5d6ffreticulum_config_dirTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)Tb4b4b4,
Te6edf3include_link_statsTff7b72=Te6edf3include_link_statsTb4b4b4,
Te6edf3timeoutTff7b72=Te6edf3timeoutTb4b4b4,
Tb4b4b4)
Te6edf3status Tff7b72= Te6edf3appTff7b72.Td2a8ffrnstatus_handlerTff7b72.Td2a8ffget_statusTb4b4b4(
Te6edf3include_link_statsTff7b72=Te6edf3include_link_statsTb4b4b4,
Te6edf3sortingTff7b72=Te6edf3sortingTb4b4b4,
Te6edf3sort_reverseTff7b72=Te6edf3sort_reverseTb4b4b4,
Te6edf3statsTff7b72=Te6edf3statsTb4b4b4,
Te6edf3link_countTff7b72=Te6edf3link_countTb4b4b4,
Te6edf3include_local_blackholeTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)
Te6edf3statusTb4b4b4[Ta5d6ff"Ta5d6ffremoteTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3remote
Tff7b72elseTb4b4b4:
Te6edf3status Tff7b72= Te6edf3appTff7b72.Td2a8ffrnstatus_handlerTff7b72.Td2a8ffget_statusTb4b4b4(
Te6edf3include_link_statsTff7b72=Te6edf3include_link_statsTb4b4b4,
Te6edf3sortingTff7b72=Te6edf3sortingTb4b4b4,
Te6edf3sort_reverseTff7b72=Te6edf3sort_reverseTb4b4b4,
Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Te6edf3statusTb4b4b4)
Tff7b72except Tb4b4b4(Tf85149ValueErrorTb4b4b4, Tf85149FileNotFoundErrorTb4b4b4) Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72except Tf85149TimeoutError Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff504Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff500Tb4b4b4,
Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnpath/tableTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnpath_tableTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ff_optional_intTb4b4b4(Te6edf3rawTb4b4b4, Te6edf3field_nameTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3raw Tff7b72in Tb4b4b4(Tff7b72NoneTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72tryTb4b4b4:
Tff7b72return Tffa657intTb4b4b4(Te6edf3rawTb4b4b4)
Tff7b72except Tb4b4b4(Tf85149TypeErrorTb4b4b4, Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffInvalid Tffd700{Te6edf3field_nameTffd700}Ta5d6ff"Tb4b4b4) Tff7b72from Tff7b72None

Tff7b72tryTb4b4b4:
Te6edf3max_hops Tff7b72= Te6edf3_optional_intTb4b4b4(Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffmax_hopsTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffmax_hopsTa5d6ff"Tb4b4b4)
Te6edf3hops Tff7b72= Te6edf3_optional_intTb4b4b4(Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffhopsTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffhopsTa5d6ff"Tb4b4b4)
Te6edf3page Tff7b72= Tffa657intTb4b4b4(Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpageTa5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4)
Te6edf3limit Tff7b72= Tffa657intTb4b4b4(Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fflimitTa5d6ff"Tb4b4b4, T79c0ff50Tb4b4b4)Tb4b4b4)
Tff7b72except Tf85149ValueError Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)

Te6edf3search Tff7b72= Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsearchTa5d6ff"Tb4b4b4)
Te6edf3interface Tff7b72= Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffinterfaceTa5d6ff"Tb4b4b4)
Te6edf3remote Tff7b72= Tb4b4b4(Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffremoteTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Te6edf3identity_path Tff7b72= Tb4b4b4(Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffidentity_pathTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72or Tff7b72None
Te6edf3identity_name Tff7b72= Tb4b4b4(Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffidentity_nameTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72or Tff7b72None
Te6edf3timeout_raw Tff7b72= Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4)

Te6edf3not_ready Tff7b72= Te6edf3appTff7b72.Td2a8ff_require_rns_tool_handlerTb4b4b4(Te6edf3appTff7b72.Td2a8ffrnpath_handlerTb4b4b4, Ta5d6ff"Ta5d6ffRNPathTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3not_ready Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3not_ready

Tff7b72tryTb4b4b4:
Te6edf3timeout Tff7b72= Tffa657floatTb4b4b4(Te6edf3timeout_rawTb4b4b4) Tff7b72if Te6edf3timeout_raw Tff7b72not Tff7b72in Tb4b4b4(Tff7b72NoneTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4) Tff7b72else Tff7b72None
Tff7b72except Tb4b4b4(Tf85149TypeErrorTb4b4b4, Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffInvalid timeoutTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)

Tff7b72tryTb4b4b4:
Te6edf3raw_table Tff7b72= Tff7b72None
Tff7b72if Te6edf3remoteTb4b4b4:
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787remote_management_client Tff7b72import Tb4b4b4(
Te6edf3fetch_remote_path_tableTb4b4b4,
Tb4b4b4)

Tff7b72if Tff7b72not Te6edf3identity_path Tff7b72and Tff7b72not Te6edf3identity_nameTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffidentity_path or identity_name is required for remote queriesTa5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff400Tb4b4b4,
Tb4b4b4)
Te6edf3raw_table Tff7b72= Tff7b72await Te6edf3asyncioTff7b72.Td2a8ffto_threadTb4b4b4(
Te6edf3fetch_remote_path_tableTb4b4b4,
Te6edf3remote_transport_hashTff7b72=Te6edf3remoteTb4b4b4,
Te6edf3identity_pathTff7b72=Te6edf3identity_pathTb4b4b4,
Te6edf3identity_nameTff7b72=Te6edf3identity_nameTb4b4b4,
Te6edf3reticulum_config_dirTff7b72=Tffa657getattrTb4b4b4(Te6edf3appTb4b4b4, Ta5d6ff"Ta5d6ffreticulum_config_dirTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)Tb4b4b4,
Te6edf3max_hopsTff7b72=Te6edf3max_hopsTb4b4b4,
Te6edf3timeoutTff7b72=Te6edf3timeoutTb4b4b4,
Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3appTff7b72.Td2a8ffrnpath_handlerTff7b72.Td2a8ffget_path_tableTb4b4b4(
Te6edf3max_hopsTff7b72=Te6edf3max_hopsTb4b4b4,
Te6edf3searchTff7b72=Te6edf3searchTb4b4b4,
Te6edf3interfaceTff7b72=Te6edf3interfaceTb4b4b4,
Te6edf3hopsTff7b72=Te6edf3hopsTb4b4b4,
Te6edf3pageTff7b72=Te6edf3pageTb4b4b4,
Te6edf3limitTff7b72=Te6edf3limitTb4b4b4,
Te6edf3raw_tableTff7b72=Te6edf3raw_tableTb4b4b4,
Tb4b4b4)
Tff7b72if Te6edf3remoteTb4b4b4:
Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffremoteTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3remote
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Te6edf3resultTb4b4b4)
Tff7b72except Tb4b4b4(Tf85149ValueErrorTb4b4b4, Tf85149FileNotFoundErrorTb4b4b4) Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72except Tf85149TimeoutError Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff504Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff500Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnpath/ratesTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnpath_ratesTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3remote Tff7b72= Tb4b4b4(Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffremoteTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Te6edf3identity_path Tff7b72= Tb4b4b4(Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffidentity_pathTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72or Tff7b72None
Te6edf3identity_name Tff7b72= Tb4b4b4(Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffidentity_nameTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72or Tff7b72None
Te6edf3timeout_raw Tff7b72= Te6edf3requestTff7b72.Td2a8ffqueryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4)

Te6edf3not_ready Tff7b72= Te6edf3appTff7b72.Td2a8ff_require_rns_tool_handlerTb4b4b4(Te6edf3appTff7b72.Td2a8ffrnpath_handlerTb4b4b4, Ta5d6ff"Ta5d6ffRNPathTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3not_ready Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3not_ready

Tff7b72tryTb4b4b4:
Te6edf3timeout Tff7b72= Tffa657floatTb4b4b4(Te6edf3timeout_rawTb4b4b4) Tff7b72if Te6edf3timeout_raw Tff7b72not Tff7b72in Tb4b4b4(Tff7b72NoneTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4) Tff7b72else Tff7b72None
Tff7b72except Tb4b4b4(Tf85149TypeErrorTb4b4b4, Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffInvalid timeoutTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)

Tff7b72tryTb4b4b4:
Te6edf3raw_table Tff7b72= Tff7b72None
Tff7b72if Te6edf3remoteTb4b4b4:
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787remote_management_client Tff7b72import Tb4b4b4(
Te6edf3fetch_remote_rate_tableTb4b4b4,
Tb4b4b4)

Tff7b72if Tff7b72not Te6edf3identity_path Tff7b72and Tff7b72not Te6edf3identity_nameTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffidentity_path or identity_name is required for remote queriesTa5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff400Tb4b4b4,
Tb4b4b4)
Te6edf3raw_table Tff7b72= Tff7b72await Te6edf3asyncioTff7b72.Td2a8ffto_threadTb4b4b4(
Te6edf3fetch_remote_rate_tableTb4b4b4,
Te6edf3remote_transport_hashTff7b72=Te6edf3remoteTb4b4b4,
Te6edf3identity_pathTff7b72=Te6edf3identity_pathTb4b4b4,
Te6edf3identity_nameTff7b72=Te6edf3identity_nameTb4b4b4,
Te6edf3reticulum_config_dirTff7b72=Tffa657getattrTb4b4b4(Te6edf3appTb4b4b4, Ta5d6ff"Ta5d6ffreticulum_config_dirTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)Tb4b4b4,
Te6edf3timeoutTff7b72=Te6edf3timeoutTb4b4b4,
Tb4b4b4)
Te6edf3rates Tff7b72= Te6edf3appTff7b72.Td2a8ffrnpath_handlerTff7b72.Td2a8ffget_rate_tableTb4b4b4(Te6edf3raw_tableTff7b72=Te6edf3raw_tableTb4b4b4)
Te6edf3payload Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffratesTa5d6ff"Tb4b4b4: Te6edf3ratesTb4b4b4}
Tff7b72if Te6edf3remoteTb4b4b4:
Te6edf3payloadTb4b4b4[Ta5d6ff"Ta5d6ffremoteTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3remote
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Te6edf3payloadTb4b4b4)
Tff7b72except Tb4b4b4(Tf85149ValueErrorTb4b4b4, Tf85149FileNotFoundErrorTb4b4b4) Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72except Tf85149TimeoutError Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff504Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff500Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnpath/dropTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnpath_dropTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3data Tff7b72= Tff7b72await Te6edf3requestTff7b72.Td2a8ffjsonTb4b4b4(Tb4b4b4)
Te6edf3destination_hash Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3destination_hashTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdestination_hash is requiredTa5d6ff"Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff400Tb4b4b4,
Tb4b4b4)
Te6edf3not_ready Tff7b72= Te6edf3appTff7b72.Td2a8ff_require_rns_tool_handlerTb4b4b4(Te6edf3appTff7b72.Td2a8ffrnpath_handlerTb4b4b4, Ta5d6ff"Ta5d6ffRNPathTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3not_ready Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3not_ready
Tff7b72tryTb4b4b4:
Te6edf3success Tff7b72= Te6edf3appTff7b72.Td2a8ffrnpath_handlerTff7b72.Td2a8ffdrop_pathTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsuccessTa5d6ff"Tb4b4b4: Te6edf3successTb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff500Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnpath/drop-viaTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnpath_drop_viaTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3data Tff7b72= Tff7b72await Te6edf3requestTff7b72.Td2a8ffjsonTb4b4b4(Tb4b4b4)
Te6edf3transport_instance_hash Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftransport_instance_hashTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3transport_instance_hashTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fftransport_instance_hash is requiredTa5d6ff"Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff400Tb4b4b4,
Tb4b4b4)
Te6edf3not_ready Tff7b72= Te6edf3appTff7b72.Td2a8ff_require_rns_tool_handlerTb4b4b4(Te6edf3appTff7b72.Td2a8ffrnpath_handlerTb4b4b4, Ta5d6ff"Ta5d6ffRNPathTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3not_ready Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3not_ready
Tff7b72tryTb4b4b4:
Te6edf3success Tff7b72= Te6edf3appTff7b72.Td2a8ffrnpath_handlerTff7b72.Td2a8ffdrop_all_viaTb4b4b4(Te6edf3transport_instance_hashTb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsuccessTa5d6ff"Tb4b4b4: Te6edf3successTb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff500Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnpath/drop-queuesTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnpath_drop_queuesTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3not_ready Tff7b72= Te6edf3appTff7b72.Td2a8ff_require_rns_tool_handlerTb4b4b4(Te6edf3appTff7b72.Td2a8ffrnpath_handlerTb4b4b4, Ta5d6ff"Ta5d6ffRNPathTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3not_ready Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3not_ready
Tff7b72tryTb4b4b4:
Te6edf3appTff7b72.Td2a8ffrnpath_handlerTff7b72.Td2a8ffdrop_announce_queuesTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsuccessTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff500Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnpath/requestTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnpath_requestTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3data Tff7b72= Tff7b72await Te6edf3requestTff7b72.Td2a8ffjsonTb4b4b4(Tb4b4b4)
Te6edf3destination_hash Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3destination_hashTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdestination_hash is requiredTa5d6ff"Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff400Tb4b4b4,
Tb4b4b4)
Te6edf3not_ready Tff7b72= Te6edf3appTff7b72.Td2a8ff_require_rns_tool_handlerTb4b4b4(Te6edf3appTff7b72.Td2a8ffrnpath_handlerTb4b4b4, Ta5d6ff"Ta5d6ffRNPathTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3not_ready Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3not_ready
Tff7b72tryTb4b4b4:
Te6edf3success Tff7b72= Te6edf3appTff7b72.Td2a8ffrnpath_handlerTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsuccessTa5d6ff"Tb4b4b4: Te6edf3successTb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff500Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnpath/trace/Tffd700{destination_hash}Ta5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnpath_traceTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3destination_hash Tff7b72= Te6edf3requestTff7b72.Td2a8ffmatch_infoTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3destination_hashTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdestination_hash is requiredTa5d6ff"Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff400Tb4b4b4,
Tb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72not Te6edf3appTff7b72.Td2a8ffrnpath_trace_handlerTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffRNPathTraceHandler not initialized for current contextTa5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff503Tb4b4b4,
Tb4b4b4)
Te6edf3result Tff7b72= Tff7b72await Te6edf3appTff7b72.Td2a8ffrnpath_trace_handlerTff7b72.Td2a8fftrace_pathTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Te6edf3resultTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3loggerTff7b72.Td2a8ffexceptionTb4b4b4(Ta5d6ff"Ta5d6ffRN path trace route failedTa5d6ff"Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffTrace failedTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff500Tb4b4b4)

Tf0883e@routesTff7b72.Td2a8ffpostTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/rnprobeTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffrnprobeTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4:
Te6edf3data Tff7b72= Tff7b72await Te6edf3requestTff7b72.Td2a8ffjsonTb4b4b4(Tb4b4b4)
Te6edf3destination_hash_str Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3full_name Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fffull_nameTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3size Tff7b72= Tffa657intTb4b4b4(Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsizeTa5d6ff"Tb4b4b4, Te6edf3RNProbeHandlerTff7b72.Td2a8ffDEFAULT_PROBE_SIZETb4b4b4)Tb4b4b4)
Tff7b72except Tb4b4b4(Tf85149TypeErrorTb4b4b4, Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffInvalid sizeTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3wait Tff7b72= Tffa657floatTb4b4b4(Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffwaitTa5d6ff"Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4)
Tff7b72except Tb4b4b4(Tf85149TypeErrorTb4b4b4, Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffInvalid waitTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3probes Tff7b72= Tffa657intTb4b4b4(Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffprobesTa5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4)
Tff7b72except Tb4b4b4(Tf85149TypeErrorTb4b4b4, Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffInvalid probesTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)

Te6edf3timeout Tff7b72= Tff7b72None
Te6edf3raw_timeout Tff7b72= Te6edf3dataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4, T79c0ff0Tb4b4b4)
Tff7b72if Te6edf3raw_timeout Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3t Tff7b72= Tffa657floatTb4b4b4(Te6edf3raw_timeoutTb4b4b4)
Tff7b72except Tb4b4b4(Tf85149TypeErrorTb4b4b4, Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffInvalid timeoutTa5d6ff"Tb4b4b4}Tb4b4b4, Te6edf3statusTff7b72=T79c0ff400Tb4b4b4)
Tff7b72if Te6edf3t Tff7b72!= T79c0ff0Tb4b4b4:
Te6edf3timeout Tff7b72= Te6edf3t

Tff7b72tryTb4b4b4:
Te6edf3destination_hash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3destination_hash_strTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6fffTa5d6ff"Ta5d6ffInvalid destination hash: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff400Tb4b4b4,
Tb4b4b4)

Tff7b72if Tff7b72not Te6edf3full_nameTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fffull_name is requiredTa5d6ff"Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff400Tb4b4b4,
Tb4b4b4)

Te6edf3not_ready Tff7b72= Te6edf3appTff7b72.Td2a8ff_require_rns_tool_handlerTb4b4b4(Te6edf3appTff7b72.Td2a8ffrnprobe_handlerTb4b4b4, Ta5d6ff"Ta5d6ffRNProbeTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3not_ready Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3not_ready

Tff7b72tryTb4b4b4:
Te6edf3result Tff7b72= Tff7b72await Te6edf3appTff7b72.Td2a8ffrnprobe_handlerTff7b72.Td2a8ffprobe_destinationTb4b4b4(
Te6edf3destination_hashTff7b72=Te6edf3destination_hashTb4b4b4,
Te6edf3full_nameTff7b72=Te6edf3full_nameTb4b4b4,
Te6edf3sizeTff7b72=Te6edf3sizeTb4b4b4,
Te6edf3timeoutTff7b72=Te6edf3timeoutTb4b4b4,
Te6edf3waitTff7b72=Te6edf3waitTb4b4b4,
Te6edf3probesTff7b72=Te6edf3probesTb4b4b4,
Tb4b4b4)
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(Te6edf3resultTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Te6edf3webTff7b72.Td2a8ffjson_responseTb4b4b4(
Tb4b4b4{Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4}Tb4b4b4,
Te6edf3statusTff7b72=T79c0ff500Tb4b4b4,
Tb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────